<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //局部作用域的赋值规则
      // a=10 //全局变量  var a =10

      //局部变量 如果没有声明  先会在局部查找有无声明  如果有就直接赋值给变量
      //如果没有声明 会向上层赋值,直到赋值给全局变量
      //   function fn() {
      //     a = 10
      //   }
      //   fn()
      //   console.log(a)
      //   function fn1() {
      //     function fn2() {
      //         // var a
      //       function fn3() {
      //         a = 10 //无论在局部还是全局 都是声明一个全局变量 //不推荐
      //       }
      //       fn3()
      //       console.log(a);
      //     }
      //     fn2()
      //     console.log(a);
      //   }
      //   fn1();
      //   console.log(a);
      //变量赋值规则    一个变量赋值之后  未声明 会向上级作用域查找该变量的声明 都没有声明  则为全局变量     如果其中有声明 则会将变量的作用域提升至声明变量的作用域
      //变量访问规则   一个变量 访问时如果该局部作用域没有该变量的声明 则会向上查找该变量的声明域 如果没有 就error xx is not defined  如果有 则在该作用域访问
      function fn() {
        return function a() {
          var aq = 0
          console.log(aq)
        }
      }
      var aq = 10
      fn()()
    </script>
  </body>
</html>
